import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import UnoCSS from 'unocss/vite'
import { resolve } from 'path'

// 自动引入插件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import ElementPlus from 'unplugin-element-plus/vite'

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    UnoCSS(),

    // 自动引入Vue的API和组合式函数
    AutoImport({
      // 自动引入的库
      imports: [
        'vue',
        'vue-router',
        'pinia',
        {
          'lodash-es': ['debounce', 'throttle', 'cloneDeep', 'merge', 'omit', 'pick', 'uniq', 'isEmpty', 'isEqual'],
          nanoid: [['nanoid', 'nanoid']]
        }
      ],
      // 自动引入Element Plus相关函数
      resolvers: [ElementPlusResolver()],
      // 自动扫描src目录下的composables
      dirs: ['./src/composables/**', './src/utils/**'],
      // 生成类型声明文件
      dts: true,
      // 在Vue模板中自动引入
      vueTemplate: true,
      // 自动引入stores
      include: [
        /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
        /\.vue$/,
        /\.vue\?vue/ // .vue
      ]
    }),

    // 自动引入组件
    Components({
      // Element Plus组件自动引入
      resolvers: [
        ElementPlusResolver({
          // 自动引入样式
          importStyle: 'sass'
        })
      ],
      // 自动扫描并引入src/components目录下的组件
      dirs: ['src/components'],
      // 生成类型声明文件
      dts: true,
      // 包含的文件类型
      include: [/\.vue$/, /\.vue\?vue/]
    }),

    // Element Plus 优化
    ElementPlus({
      useSource: true
    })
  ],

  resolve: {
    alias: {
      '@': resolve(__dirname, 'src')
    }
  },

  server: {
    port: 3000,
    open: true
  },

  build: {
    outDir: 'dist',
    assetsDir: 'assets',
    sourcemap: false,
    rollupOptions: {
      output: {
        chunkFileNames: 'js/[name]-[hash].js',
        entryFileNames: 'js/[name]-[hash].js',
        assetFileNames: '[ext]/[name]-[hash].[ext]'
      }
    }
  }
})
